// 输入两棵二叉树A和B，判断B是不是A的子结构。(约定空树不是任意一个树的子结构)

// B是A的子结构， 即 A中有出现和B相同的结构和节点值。

int iscontain(struct TreeNode* A, struct TreeNode* B) {
    if (B == NULL) return true; // B遍历结束 
    if (A == NULL || A->val != B->val) return false;    // A遍历结束或A与B的节点值不相同
    // 递归比较左右两边的子树 
    return iscontain(A->left, B->left) && iscontain(A->right, B->right);
}

bool isSubStructure(struct TreeNode* A, struct TreeNode* B){
    if (A == NULL || B == NULL) return false;
    // A的任一部分包含B
    return iscontain(A, B) || isSubStructure(A->left, B) || isSubStructure(A->right, B);
}